package net.ermannofranco.xmltest;

/*
 * MagazzinoSchema.java
 *
 * Created on 19 marzo 2004, 10.56
 */
import net.ermannofranco.xml.schema.Attribute;
import net.ermannofranco.xml.schema.ComplexType;
import net.ermannofranco.xml.schema.Element;
import net.ermannofranco.xml.schema.ExtensionSimple;
import net.ermannofranco.xml.schema.Facet;
import net.ermannofranco.xml.schema.Schema;
import net.ermannofranco.xml.schema.Sequence;
import net.ermannofranco.xml.schema.SimpleContent;
import net.ermannofranco.xml.schema.SimpleType;
import net.ermannofranco.xml.schema.Use;
import net.ermannofranco.xml.schema.XmlType;

/**
 * 
 * @author ermanno
 */
public class MagazzinoSchema extends Schema {

	/** Creates a new instance of Magazzino_Schema */
	public MagazzinoSchema() {
		setTargetNamespace("uuu", "aaa.com");
		// dichiarazioni

		// ComplexType ct;

		Attribute att;
		Sequence seq;

		SimpleContent sc;
		ExtensionSimple ext;

		addDocumentation("istanziazione del documento, l'unico oggetto istanziabile");
		addDocumentation("definizione dei tipi e simultaneo aggancio al documento nella giusta posizione");

		ComplexType articoloType = addComplexType("articoloType");
		articoloType.addDocumentation("tipo articolo");

		seq = articoloType.setSequence();
		SimpleType prezzoType = addSimpleType("prezzoType");
		prezzoType
				.addDocumentation("tipo prezzo, decimale>0, 2 cifre dopo il punto");
		prezzoType.setRestriction(XmlType.DECIMAL).addFacet(
				Facet.FRACTIONDIGITS, "2").addFacet(Facet.MINEXCLUSIVE, "0");

		// riciclo re
		SimpleType stPeso = addSimpleType("stPeso");
		stPeso
				.addDocumentation("tipo pesoSemplice, decimale>0, 3 cifre dopo il punto");
		stPeso.setRestriction(XmlType.DECIMAL).addFacet(Facet.FRACTIONDIGITS,
				"3").addFacet(Facet.MINEXCLUSIVE, "0");

		seq.addElem("CODICE", XmlType.STRING);
		seq.addElem("DESCRIZIONE", XmlType.STRING);
		seq.addElem("PREZZO", prezzoType);
		seq.addElem("PESO", stPeso);

		// riciclo ct,re
		ComplexType ct = addComplexType("pesoType");
		ct.addDocumentation("tipo peso con attributo");
		sc = ct.setSimpleContent();
		ext = sc.setExtension(stPeso);// referenzio il tipo semplice, come da
		// manuale
		att = ext.addTagAttribute("UM", Use.REQUIRED);

		att
				.setSimpleType()
				.setRestriction(XmlType.STRING)
				.addDocumentation(
						"Tipo semplice anonimo, non mi serve dare nome. "
								+ "invece la restrizione va definita perche' uso un facet ripetitivo "
								+ "(solo enumeration e pattern lo sono)")
				.addFacet(Facet.ENUMERATION, "KG").addFacet(Facet.ENUMERATION,
						"GR");
		// nei metodi incatenati preferisco indentare il semicolon

		// TUTTI I METODI DELLA LIBRERIA SI POSSONO INCATENARE CON LA GERARCHIA
		// OPPORTUNA
		Element elem = addElem("MAGAZZINO");
		elem.addDocumentation("Struttura del documento, "
				+ "per esemplificazione il tipo magazzino e' anonimo.");
		elem.setComplexType().setSequence().addElem("ARTICOLO", articoloType)
				.setZeroMinOccurs();

		// save("../generati/" + getClass().getName());
	}

}
